name: CI DOC Checker

on:
  pull_request_target:
    types:
      - opened
      - synchronize
    branches:
      - main
      - 'branch*'

permissions:
  issues: write
  pull-requests: write

jobs:
  doc-checker:
    runs-on: ubuntu-latest
    name: DOC FILTER
    if: >
      !contains(github.event.pull_request.title, '(sync #') &&
      !contains(github.event.pull_request.labels.*.name, 'sync') &&
      (!startsWith(github.head_ref, github.base_ref) || !contains(github.head_ref, '-sync-'))
    outputs:
      output1: ${{ steps.doc-changes-info.outputs.doc }}
    steps:
      - uses: dorny/paths-filter@v3
        id: changes
        with:
          filters: |
            doc:
            - 'docs/**'
      - name: DOC CHECK INFO
        id: doc-changes-info
        run: |
          echo "doc=${{ steps.changes.outputs.doc }}" >> $GITHUB_OUTPUT

  remove-doc-label:
    needs: doc-checker
    runs-on: ubuntu-latest
    name: REMOVE DOC LABEL
    if: ${{ needs.doc-checker.outputs.output1 != 'true' }}
    steps:
      - name: remove document label
        uses: actions-ecosystem/action-remove-labels@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          labels: documentation

  add-doc-label:
    needs: doc-checker
    runs-on: ubuntu-latest
    name: ADD DOC LABEL
    if: ${{ needs.doc-checker.outputs.output1 == 'true' }}
    steps:
      - name: add document label
        uses: actions-ecosystem/action-add-labels@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          labels: documentation

  markdownlint:
    runs-on: ubuntu-latest
    needs: add-doc-label
    env:
      PR_NUMBER: ${{ github.event.number }}
    steps:
      - name: clean
        run: |
          rm -rf ${{ github.workspace }}
          mkdir -p ${{ github.workspace }}
      - name: BRANCH INFO
        id: branch
        run: |
          echo ${{github.base_ref}}
          echo "branch=${{github.base_ref}}" >> $GITHUB_OUTPUT

      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Checkout PR
        run: |
          BRANCH=${{steps.branch.outputs.branch}}
          git config --global user.name "wanpengfei-git";
          git config --global user.email "wanpengfei91@163.com";
          git checkout $BRANCH;
          git pull;
          BRANCH_NAME="${BRANCH}-${PR_NUMBER}";
          git fetch origin pull/${PR_NUMBER}/head:${BRANCH_NAME};
          git checkout $BRANCH_NAME;
          git checkout -b merge_pr;
          git merge --squash --no-edit ${BRANCH} || (echo "::error::Merge conflict, please check." && exit -1);

      - uses: actions/setup-node@v3
        with:
          node-version: 18

      - uses: articulate/actions-markdownlint@v1.1.0
        with:
          config: "docs/.markdownlint.json"
          files: 'docs/**/*.md'
          ignore: node_modules
          version: 0.28.1

      - name: docusaurus-mdx-checker
        if: always()
        run: |
          npx docusaurus-mdx-checker -c docs

      - name: link check
        if: always()
        uses: lycheeverse/lychee-action@v1.8.0
        with:
          fail: true
          args: >
            --config docs/lychee.toml
            --offline "docs/**/*.md"

      - name: Docusaurus build
        env:
          NODE_OPTIONS: --max-old-space-size=8192
          DISABLE_VERSIONING: true
        working-directory: ./docs/docusaurus
        run: |
          rm -rf ./docs
          rm -rf ./i18n/zh/docusaurus-plugin-content-dos/current
          mkdir -p ./i18n/zh/docusaurus-plugin-content-docs
          mv ../en ./docs
          rm -rf ./docs/release_notes ./docs/ecosystem_release
          mv ../zh ./i18n/zh/docusaurus-plugin-content-docs/current
          rm -rf ./i18n/zh/docusaurus-plugin-content-docs/current/release_notes ./i18n/zh/docusaurus-plugin-content-docs/current/ecosystem_release
          yarn install --frozen-lockfile
          yarn clear
          yarn build

  behavior-unchange:
    runs-on: ubuntu-latest
    needs: add-doc-label
    env:
      PR_NUMBER: ${{ github.event.number }}
      REPO: ${{ github.repository }}
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    steps:
      - name: Set Body
        run: |
          body=$(gh pr view ${PR_NUMBER} -R ${REPO} --json body -q .body)
          body=${body//"[x] Yes, this PR will result in a change in behavior."/"[ ] Yes, this PR will result in a change in behavior."}
          body=${body//"[ ] No, this PR will not result in a change in behavior."/"[x] No, this PR will not result in a change in behavior."}
          gh pr edit ${PR_NUMBER} -R ${REPO} -b "$body"
